The previous models we have used served a purpose, but are limited - these approaches are analogous to building models by fitting distributions.
We now move on to more sophisticated statistical models - Exponential Random Graph Models (ERGMs) in particular. Other approaches exist, such as stochastic block models and latent network models, but we will not have much time to discuss these.
Suppose we have a graph \(G = (V, E)\) - let \(Y\) be the adjacency matrix for this graph and \(y\) is a particular realisation of this graph.
\[ P(Y = y) = \frac{1}{\kappa} \, \exp \left( \sum_H \theta_H g_H(y) \right) \]
where
In simpler terms, we fit the network based on counts of characteristics of the graph such as edges, triangles, stars and anything else we can think of.
We build our first model from edges - we assume only the presence of edges between nodes is relevant for the creation of the graph.
The function summary.statistics counts the various configurations in the network.
summary.statistics(lazega_network ~ edges)
## edges
## 115
We now extend this model to see other configuration types including k-stars and so on.
summary.statistics(lazega_network ~ edges + kstar(2) + kstar(3) + triangle)
## edges kstar2 kstar3 triangle
## 115 926 2681 120
In practice, adding \(k\)-stars directly as characteristics of networks results in poor fits so we instead have an alternative formulation that allows us to fit for all orders of star effects simultaneously. The ones we discuss are all parameterised allowing control over how the characteristics affect the value.
altkstar\[ \text{AKS}_{\lambda}(y) = \sum_{k=2}^{N_v-1} (-1)^k \frac{S_k(y)}{\lambda^{k-2}} \] where \(S_k(y)\) is the number of \(k\)-stars in the graph.
gwdegree\[ \text{GWD}_{\gamma}(y) = \sum_{d=0}^{N_v-1} e^{-\gamma d} \, N_d(y) \]
where \(N_d(y)\) is the number of vertices of degree \(d\).
gwesp\[ \text{AKT}_{\lambda}(y) = 3T_1 + \sum_{k=2}^{N_v-2} (-1)^{k+1} \frac{T_k(y)}{\lambda^{k-1}} \]
where \(T_k\) is the number of \(k\)-triangles, the set of \(k\) individual triangles sharing a common base.
In our models we use the AKT quantity to match the textbook, but any can be used.
summary.statistics(lazega_network ~ edges + gwesp(1, fixed = TRUE))
## edges gwesp.fixed.1
## 115.000 213.175
summary.statistics(lazega_network ~ edges + triangles + gwdegree(1, fixed = TRUE))
## edges triangle gwdegree
## 115.0 120.0 79.2
So far we have kept our focus on purely topographic properties of the networks, ignoring the attributes of the edges or vertices.
It is natural to expect that the existence or not of an edge between two vertices to also depend on the attributes of those vertices. We can incorporate them into our ERGMs as additional terms.
Vertex attributes can influence a graph in two ways: a value on a vertex may influence the probability of an edge being connected (analogous to a ‘main’ effect in standard modelling), and the values on both vertices may influence the probability (analogous to ‘interactions’ or ‘second-order effects’).
These predictors are added to a formula via the nodemain and match terms.
summary.statistics(lazega_network ~ edges + triangles + gwdegree(1, fixed = TRUE) +
nodemain('Practice') + match('Office'))
## edges triangle gwdegree nodecov.Practice
## 115.0 120.0 79.2 359.0
## nodematch.Office
## 85.0
To fit these models, we use an MCMC algorithm to calculate the MLE for the model. The ergm() function performs this optimisation.
We start fitting the model with some simple geometries as predictors.
lazega_01_ergm <- ergm(lazega_network ~ edges + triangles + gwesp(1)
,control = control.ergm(seed = 42)
)
run_ergm <- function() simulate.ergm(lazega_01_ergm) %>% intergraph::asIgraph()
lazega_01_lst <- run_network_model_assessment(lazega_igraph, run_ergm, n_iter = 1000)
plot(lazega_01_lst$assess_plot)
summary(lazega_01_ergm)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: lazega_network ~ edges + triangles + gwesp(1)
##
## Iterations: 2 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % p-value
## edges -3.707 0.388 0 <1e-04 ***
## triangle -0.179 0.631 0 0.777
## gwesp 0.998 0.391 0 0.011 *
## gwesp.decay 0.954 0.221 0 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 873 on 630 degrees of freedom
## Residual Deviance: 553 on 626 degrees of freedom
##
## AIC: 561 BIC: 578 (Smaller is better.)
We have simulated new graphs from this model using simulate.ergm() so we will produce one and then plot the two beside each other.
plot_1 <- ggplot(lazega_igraph, aes(x = x, y = y, xend = xend, yend = yend)) +
geom_edges() +
geom_label(aes(label = vertex.names), size = 5) +
theme_blank()
plot_2 <- ggplot(simulate.ergm(lazega_01_ergm), aes(x = x, y = y, xend = xend, yend = yend)) +
geom_edges() +
geom_label(aes(label = vertex.names), size = 5) +
theme_blank()
plot_grid(plot_1, plot_2, ncol = 2)
We will have a look at the degree distribution of the original network and the simulated ERGM from it.
lazega_degdist <- lazega_igraph %>%
igraph::degree()
lazega_01_degdist <- simulate.ergm(lazega_01_ergm) %>%
intergraph::asIgraph() %>%
igraph::degree()
plot_1 <- ggplot() +
geom_histogram(aes(x = lazega_degdist), binwidth = 1) +
xlab("Degree") +
ylab("Count") +
ggtitle("Original Network")
plot_2 <- ggplot() +
geom_histogram(aes(x = lazega_01_degdist), binwidth = 1) +
xlab("Degree") +
ylab("Count") +
ggtitle("ERGM Simulation")
plot_grid(plot_1, plot_2, ncol = 2)
We now want to see the model running with vertex attributes as part of the model.
lazega_02_ergm <- ergm(lazega_network ~ edges + triangles +
gwesp(1) + nodefactor('Practice') +
nodemain('Seniority') + nodematch('Gender') + match('Office')
,control = control.ergm(seed = 42)
)
run_02_ergm <- function() simulate.ergm(lazega_02_ergm) %>% intergraph::asIgraph()
lazega_02_lst <- run_network_model_assessment(lazega_igraph, run_02_ergm, n_iter = 1000)
plot(lazega_02_lst$assess_plot)
summary(lazega_02_ergm)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: lazega_network ~ edges + triangles + gwesp(1) + nodefactor("Practice") +
## nodemain("Seniority") + nodematch("Gender") + match("Office")
##
## Iterations: 2 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % p-value
## edges -5.92247 0.61134 0 < 1e-04 ***
## triangle -0.11754 0.62743 0 0.85145
## gwesp 0.86708 0.39163 0 0.02719 *
## gwesp.decay 0.92775 0.27628 0 0.00083 ***
## nodefactor.Practice.2 0.43843 0.12998 0 0.00079 ***
## nodecov.Seniority 0.02201 0.00635 0 0.00056 ***
## nodematch.Gender 0.65303 0.23721 0 0.00608 **
## nodematch.Office 1.06486 0.18450 0 < 1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 873 on 630 degrees of freedom
## Residual Deviance: 479 on 622 degrees of freedom
##
## AIC: 495 BIC: 530 (Smaller is better.)
lazega_degdist <- lazega_igraph %>%
igraph::degree()
lazega_02_degdist <- simulate.ergm(lazega_02_ergm) %>%
intergraph::asIgraph() %>%
igraph::degree()
plot_1 <- ggplot() +
geom_histogram(aes(x = lazega_degdist), binwidth = 1) +
xlab("Degree") +
ylab("Count") +
ggtitle("Lazega")
plot_2 <- ggplot() +
geom_histogram(aes(x = lazega_01_degdist), binwidth = 1) +
xlab("Degree") +
ylab("Count") +
ggtitle("Model 01")
plot_3 <- ggplot() +
geom_histogram(aes(x = lazega_02_degdist), binwidth = 1) +
xlab("Degree") +
ylab("Count") +
ggtitle("Model 02")
plot_grid(plot_1, plot_2, plot_3, ncol = 3)
The faux.dixon.high dataset is a simulated dataset modelled from high-school friendships. The network is directed, but we fit an undirected version in this workshop.
data(faux.dixon.high)
dixon_igraph <- faux.dixon.high %>%
asIgraph() %>%
as.undirected() %>%
simplify()
dixon_network <- dixon_igraph %>%
asNetwork()
dixon_plot <- ggplot(ggnetwork(dixon_igraph, layout = 'fruchtermanreingold')
,aes(x = x, y = y, xend = xend, yend = yend)) +
geom_edges(alpha = 0.1) +
geom_nodes(aes(colour = race), size = 3) +
ggtitle('The Dixon High-school Network') +
theme_blank()
dixon_plot %>% plot()
Before we try the ERGMs, we will use a few basic random graph models first. Models such as these are not able to capture aspects like assortativity, but it may be able to generate the topology at least.
We start fitting a \(G(n,m)\) model, and see how effective we are at capturing structure in the model.
dixon_count_node <- gorder(dixon_igraph)
dixon_count_edge <- gsize (dixon_igraph)
run_gnm <- function() sample_gnm(n = dixon_count_node, dixon_count_edge)
dixon_gnm_lst <- run_network_model_assessment(dixon_igraph, run_gnm, n_iter = 1000)
plot(dixon_gnm_lst$assess_plot)
This model cannot account for the network structure at all.
We try fitting the degree distribution.
dixon_degdist <- dixon_igraph %>% igraph::degree()
run_degdist <- function() sample_degseq(dixon_degdist) %>% simplify()
dixon_degdist_lst <- run_network_model_assessment(dixon_igraph, run_degdist, n_iter = 1000)
plot(dixon_degdist_lst$assess_plot)
This model captures the connectedness of the Dixon network in terms of clusters and components, but the transitivity and avaerage path length is much lower than observed.
Before moving on to ERGMs, we try a PA model.
dixon_node_count <- dixon_igraph %>% vcount()
run_pa <- function() sample_pa(dixon_node_count, power = 1, m = 1, directed = FALSE) %>%
simplify()
dixon_pa_lst <- run_network_model_assessment(dixon_igraph, run_pa, n_iter = 1000)
plot(dixon_pa_lst$assess_plot)
We now move on to fitting ERGMs with this data, and we start with just basic geometries such as edges and \(k\)-cores. Our first model fits on edges only.
dixon_model_01_ergm <- ergm(dixon_network ~ edges
,control = control.ergm(seed = 421)
)
run_01_ergm <- function() simulate.ergm(dixon_model_01_ergm) %>% intergraph::asIgraph()
dixon_01_lst <- run_network_model_assessment(dixon_igraph, run_01_ergm, n_iter = 1000)
plot(dixon_01_lst$assess_plot)
summary(dixon_model_01_ergm)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: dixon_network ~ edges
##
## Iterations: 6 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % p-value
## edges -3.4117 0.0325 0 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 42459 on 30628 degrees of freedom
## Residual Deviance: 8661 on 30627 degrees of freedom
##
## AIC: 8663 BIC: 8672 (Smaller is better.)
Having tried to the edges as a predictor to the model, we now look to add additional geometries.
We start by adding triangles to the model, and checking the diagnostics.
dixon_triangle_ergm <- ergm(dixon_network ~ edges + triangles
,control = control.ergm(seed = 420, MCMLE.maxit = 2)
)
mcmc.diagnostics(dixon_triangle_ergm)
## Sample statistics summary:
##
## Iterations = 16384:1063936
## Thinning interval = 1024
## Number of chains = 1
## Sample size per chain = 1024
##
## 1. Empirical mean and standard deviation for each variable,
## plus standard error of the mean:
##
## Mean SD Naive SE Time-series SE
## edges -498 29.1 0.909 2.45
## triangle -583 11.5 0.360 1.12
##
## 2. Quantiles for each variable:
##
## 2.5% 25% 50% 75% 97.5%
## edges -552 -518 -499 -478 -439
## triangle -602 -591 -584 -577 -557
##
##
## Sample statistics cross-correlations:
## edges triangle
## edges 1.000000 0.730362
## triangle 0.730362 1.000000
##
## Sample statistics auto-correlation:
## Chain 1
## edges triangle
## Lag 0 1.000000 1.000000
## Lag 1024 0.647485 0.810961
## Lag 2048 0.460276 0.664464
## Lag 3072 0.342892 0.546879
## Lag 4096 0.275466 0.455498
## Lag 5120 0.224622 0.389159
##
## Sample statistics burn-in diagnostic (Geweke):
## Chain 1
##
## Fraction in 1st window = 0.1
## Fraction in 2nd window = 0.5
##
## edges triangle
## -3.395 -3.266
##
## Individual P-values (lower = worse):
## edges triangle
## 0.000685991 0.001090031
## Joint P-value (lower = worse): 0.0552124 .
##
## MCMC diagnostics shown here are from the last round of simulation, prior to computation of final parameter estimates. Because the final estimates are refinements of those used for this simulation run, these diagnostics may understate model performance. To directly assess the performance of the final model on in-model statistics, please use the GOF command: gof(ergmFitObject, GOF=~model).
# first_dixon_model_02_ergm <- quietly(ergm)(dixon_network ~ edges + gwesp(1.0, fixed=TRUE)
# ,control = control.ergm(seed = 422)
# )
dixon_model_02_ergm <- ergm(dixon_network ~ edges + gwesp(0.1, fixed=TRUE)
,control = control.ergm(seed = 422)
)
mcmc.diagnostics(dixon_model_02_ergm)
## Sample statistics summary:
##
## Iterations = 16384:4209664
## Thinning interval = 1024
## Number of chains = 1
## Sample size per chain = 4096
##
## 1. Empirical mean and standard deviation for each variable,
## plus standard error of the mean:
##
## Mean SD Naive SE Time-series SE
## edges -1.26587 67.3 1.05 8.12
## gwesp.fixed.0.1 -0.00122 75.7 1.18 8.78
##
## 2. Quantiles for each variable:
##
## 2.5% 25% 50% 75% 97.5%
## edges -122 -49.0 -1.000 39.0 143
## gwesp.fixed.0.1 -137 -55.4 -0.801 46.8 160
##
##
## Sample statistics cross-correlations:
## edges gwesp.fixed.0.1
## edges 1.000000 0.981883
## gwesp.fixed.0.1 0.981883 1.000000
##
## Sample statistics auto-correlation:
## Chain 1
## edges gwesp.fixed.0.1
## Lag 0 1.000000 1.000000
## Lag 1024 0.959921 0.956276
## Lag 2048 0.924153 0.918658
## Lag 3072 0.892304 0.884910
## Lag 4096 0.863711 0.854246
## Lag 5120 0.836224 0.826117
##
## Sample statistics burn-in diagnostic (Geweke):
## Chain 1
##
## Fraction in 1st window = 0.1
## Fraction in 2nd window = 0.5
##
## edges gwesp.fixed.0.1
## 1.838 1.905
##
## Individual P-values (lower = worse):
## edges gwesp.fixed.0.1
## 0.0660703 0.0567192
## Joint P-value (lower = worse): 0.194027 .
##
## MCMC diagnostics shown here are from the last round of simulation, prior to computation of final parameter estimates. Because the final estimates are refinements of those used for this simulation run, these diagnostics may understate model performance. To directly assess the performance of the final model on in-model statistics, please use the GOF command: gof(ergmFitObject, GOF=~model).
run_02_ergm <- function() simulate.ergm(dixon_model_02_ergm) %>% intergraph::asIgraph()
dixon_02_lst <- run_network_model_assessment(dixon_igraph, run_02_ergm, n_iter = 1000)
plot(dixon_02_lst$assess_plot)
summary(dixon_model_02_ergm)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: dixon_network ~ edges + gwesp(0.1, fixed = TRUE)
##
## Iterations: 6 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % p-value
## edges -4.9113 0.0785 0 <1e-04 ***
## gwesp.fixed.0.1 1.4933 0.0698 0 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 42459 on 30628 degrees of freedom
## Residual Deviance: 7893 on 30626 degrees of freedom
##
## AIC: 7897 BIC: 7914 (Smaller is better.)
model_03_formula <- formula(
dixon_network ~ edges + gwesp(0.1, fixed=TRUE) + absdiff('grade') +
nodefactor('race') + nodefactor('grade') + nodefactor('sex')
)
dixon_model_03_ergm <- ergm(model_03_formula, control = control.ergm(seed = 423))
mcmc.diagnostics(dixon_model_03_ergm)
## Sample statistics summary:
##
## Iterations = 16384:4209664
## Thinning interval = 1024
## Number of chains = 1
## Sample size per chain = 4096
##
## 1. Empirical mean and standard deviation for each variable,
## plus standard error of the mean:
##
## Mean SD Naive SE Time-series SE
## edges 9.004 45.7 0.714 3.96
## gwesp.fixed.0.1 10.646 53.7 0.839 4.86
## absdiff.grade 8.951 41.5 0.648 2.46
## nodefactor.race.H -2.681 13.6 0.212 1.02
## nodefactor.race.O 2.895 13.5 0.210 1.10
## nodefactor.race.W 14.114 56.2 0.879 4.64
## nodefactor.grade.8 2.935 41.2 0.643 4.23
## nodefactor.grade.9 -1.024 37.8 0.590 3.60
## nodefactor.grade.10 -3.700 36.7 0.573 3.25
## nodefactor.grade.11 16.363 25.0 0.391 2.16
## nodefactor.grade.12 -0.913 24.5 0.382 2.30
## nodefactor.sex.2 15.674 57.8 0.903 5.14
##
## 2. Quantiles for each variable:
##
## 2.5% 25% 50% 75% 97.5%
## edges -80.0 -23.0 9 40.0 98.0
## gwesp.fixed.0.1 -92.1 -26.6 11 45.7 118.2
## absdiff.grade -70.0 -20.0 8 37.0 90.6
## nodefactor.race.H -28.0 -12.0 -3 6.0 25.0
## nodefactor.race.O -23.0 -6.0 2 11.0 31.6
## nodefactor.race.W -92.0 -25.0 12 52.0 127.0
## nodefactor.grade.8 -70.6 -27.0 1 32.0 86.0
## nodefactor.grade.9 -74.0 -26.0 -2 24.0 74.0
## nodefactor.grade.10 -77.0 -27.0 -4 20.0 71.0
## nodefactor.grade.11 -29.0 -2.0 15 34.0 65.0
## nodefactor.grade.12 -45.0 -18.0 -2 15.0 49.0
## nodefactor.sex.2 -93.0 -25.0 14 54.0 131.6
##
##
## Sample statistics cross-correlations:
## edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## edges 1.000000 0.960944 0.718859 0.32520777
## gwesp.fixed.0.1 0.960944 1.000000 0.638984 0.31424450
## absdiff.grade 0.718859 0.638984 1.000000 0.17504062
## nodefactor.race.H 0.325208 0.314244 0.175041 1.00000000
## nodefactor.race.O 0.392861 0.374861 0.302275 0.10928088
## nodefactor.race.W 0.875854 0.849257 0.654493 0.15743025
## nodefactor.grade.8 0.606428 0.594195 0.385047 0.25507952
## nodefactor.grade.9 0.595994 0.600655 0.419499 0.16301193
## nodefactor.grade.10 0.611895 0.595119 0.414367 0.27901049
## nodefactor.grade.11 0.290343 0.239957 0.308103 -0.00536791
## nodefactor.grade.12 0.271393 0.258145 0.155987 0.02783963
## nodefactor.sex.2 0.871985 0.848305 0.624619 0.26376704
## nodefactor.race.O nodefactor.race.W nodefactor.grade.8
## edges 0.3928608 0.875854 0.6064281
## gwesp.fixed.0.1 0.3748609 0.849257 0.5941947
## absdiff.grade 0.3022748 0.654493 0.3850472
## nodefactor.race.H 0.1092809 0.157430 0.2550795
## nodefactor.race.O 1.0000000 0.203026 0.4294083
## nodefactor.race.W 0.2030256 1.000000 0.4535147
## nodefactor.grade.8 0.4294083 0.453515 1.0000000
## nodefactor.grade.9 0.1232242 0.571006 0.1782107
## nodefactor.grade.10 0.1253074 0.546841 0.1368225
## nodefactor.grade.11 -0.0436119 0.330747 -0.1189735
## nodefactor.grade.12 0.0898716 0.209146 0.0162538
## nodefactor.sex.2 0.3522302 0.743745 0.5267245
## nodefactor.grade.9 nodefactor.grade.10 nodefactor.grade.11
## edges 0.5959941 0.6118953 0.29034336
## gwesp.fixed.0.1 0.6006554 0.5951187 0.23995712
## absdiff.grade 0.4194992 0.4143666 0.30810256
## nodefactor.race.H 0.1630119 0.2790105 -0.00536791
## nodefactor.race.O 0.1232242 0.1253074 -0.04361187
## nodefactor.race.W 0.5710061 0.5468410 0.33074733
## nodefactor.grade.8 0.1782107 0.1368225 -0.11897346
## nodefactor.grade.9 1.0000000 0.2292822 0.06361923
## nodefactor.grade.10 0.2292822 1.0000000 0.05203668
## nodefactor.grade.11 0.0636192 0.0520367 1.00000000
## nodefactor.grade.12 -0.1079798 0.0577180 0.07945564
## nodefactor.sex.2 0.4920213 0.5424618 0.21567603
## nodefactor.grade.12 nodefactor.sex.2
## edges 0.2713929 0.871985
## gwesp.fixed.0.1 0.2581449 0.848305
## absdiff.grade 0.1559872 0.624619
## nodefactor.race.H 0.0278396 0.263767
## nodefactor.race.O 0.0898716 0.352230
## nodefactor.race.W 0.2091458 0.743745
## nodefactor.grade.8 0.0162538 0.526725
## nodefactor.grade.9 -0.1079798 0.492021
## nodefactor.grade.10 0.0577180 0.542462
## nodefactor.grade.11 0.0794556 0.215676
## nodefactor.grade.12 1.0000000 0.307361
## nodefactor.sex.2 0.3073605 1.000000
##
## Sample statistics auto-correlation:
## Chain 1
## edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## Lag 0 1.000000 1.000000 1.000000 1.000000
## Lag 1024 0.919471 0.919852 0.830308 0.907229
## Lag 2048 0.854082 0.857425 0.710997 0.834093
## Lag 3072 0.798316 0.805412 0.615130 0.768943
## Lag 4096 0.751077 0.762621 0.546660 0.710521
## Lag 5120 0.707507 0.720018 0.486869 0.658489
## nodefactor.race.O nodefactor.race.W nodefactor.grade.8
## Lag 0 1.000000 1.000000 1.000000
## Lag 1024 0.906189 0.909257 0.933649
## Lag 2048 0.830684 0.834828 0.877253
## Lag 3072 0.765614 0.772796 0.827389
## Lag 4096 0.713073 0.724210 0.783201
## Lag 5120 0.667379 0.675909 0.742243
## nodefactor.grade.9 nodefactor.grade.10 nodefactor.grade.11
## Lag 0 1.000000 1.000000 1.000000
## Lag 1024 0.922390 0.922912 0.916117
## Lag 2048 0.854493 0.862401 0.852947
## Lag 3072 0.794801 0.809312 0.797467
## Lag 4096 0.742727 0.762522 0.749667
## Lag 5120 0.693738 0.716927 0.706617
## nodefactor.grade.12 nodefactor.sex.2
## Lag 0 1.000000 1.000000
## Lag 1024 0.924909 0.921541
## Lag 2048 0.866133 0.858813
## Lag 3072 0.814533 0.807129
## Lag 4096 0.769087 0.761614
## Lag 5120 0.731710 0.719138
##
## Sample statistics burn-in diagnostic (Geweke):
## Chain 1
##
## Fraction in 1st window = 0.1
## Fraction in 2nd window = 0.5
##
## edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## 0.8702 0.9274 0.1798 1.4581
## nodefactor.race.O nodefactor.race.W nodefactor.grade.8 nodefactor.grade.9
## 2.2720 0.5587 2.5165 -0.1650
## nodefactor.grade.10 nodefactor.grade.11 nodefactor.grade.12 nodefactor.sex.2
## 1.6501 -2.1491 -0.5760 1.0068
##
## Individual P-values (lower = worse):
## edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## 0.3841892 0.3537088 0.8573428 0.1447996
## nodefactor.race.O nodefactor.race.W nodefactor.grade.8 nodefactor.grade.9
## 0.0230869 0.5763705 0.0118536 0.8689414
## nodefactor.grade.10 nodefactor.grade.11 nodefactor.grade.12 nodefactor.sex.2
## 0.0989266 0.0316258 0.5646153 0.3140105
## Joint P-value (lower = worse): 0.144039 .
##
## MCMC diagnostics shown here are from the last round of simulation, prior to computation of final parameter estimates. Because the final estimates are refinements of those used for this simulation run, these diagnostics may understate model performance. To directly assess the performance of the final model on in-model statistics, please use the GOF command: gof(ergmFitObject, GOF=~model).
run_03_ergm <- function() simulate.ergm(dixon_model_03_ergm) %>% intergraph::asIgraph()
dixon_03_lst <- run_network_model_assessment(dixon_igraph, run_03_ergm, n_iter = 1000)
plot(dixon_03_lst$assess_plot)
summary(dixon_model_03_ergm)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: dixon_network ~ edges + gwesp(0.1, fixed = TRUE) + absdiff("grade") +
## nodefactor("race") + nodefactor("grade") + nodefactor("sex")
##
## Iterations: 5 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % p-value
## edges -4.3052 0.1626 0 < 1e-04 ***
## gwesp.fixed.0.1 1.1914 0.0720 0 < 1e-04 ***
## absdiff.grade -0.7981 0.0370 0 < 1e-04 ***
## nodefactor.race.H 0.0140 0.0833 0 0.86635
## nodefactor.race.O 0.2003 0.0936 0 0.03248 *
## nodefactor.race.W 0.1439 0.0419 0 0.00060 ***
## nodefactor.grade.8 0.2468 0.0727 0 0.00069 ***
## nodefactor.grade.9 0.2543 0.0705 0 0.00031 ***
## nodefactor.grade.10 0.1786 0.0715 0 0.01252 *
## nodefactor.grade.11 0.0944 0.0762 0 0.21519
## nodefactor.grade.12 0.3210 0.0747 0 < 1e-04 ***
## nodefactor.sex.2 0.0553 0.0363 0 0.12776
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 42459 on 30628 degrees of freedom
## Residual Deviance: 7063 on 30616 degrees of freedom
##
## AIC: 7087 BIC: 7187 (Smaller is better.)
model_04_formula <- formula(
dixon_network ~ edges + gwesp(0.1, fixed=TRUE) + absdiff('grade') +
nodefactor('race') + nodefactor('grade') + nodefactor('sex') +
nodematch('grade', diff=TRUE) + nodematch('sex', diff=FALSE) +
nodematch('race', diff=TRUE) + degree(0:3)
)
dixon_model_04_ergm <- ergm(model_04_formula, control = control.ergm(seed = 423))
mcmc.diagnostics(dixon_model_04_ergm)
## Sample statistics summary:
##
## Iterations = 16384:4209664
## Thinning interval = 1024
## Number of chains = 1
## Sample size per chain = 4096
##
## 1. Empirical mean and standard deviation for each variable,
## plus standard error of the mean:
##
## Mean SD Naive SE Time-series SE
## edges 31.1182 68.95 1.0774 9.755
## gwesp.fixed.0.1 34.1117 75.14 1.1741 11.849
## absdiff.grade 26.2737 62.66 0.9790 7.535
## nodefactor.race.H 3.8582 12.81 0.2002 1.095
## nodefactor.race.O 10.1260 17.63 0.2754 2.344
## nodefactor.race.W 68.0791 91.04 1.4225 14.257
## nodefactor.grade.8 5.1726 39.76 0.6213 3.617
## nodefactor.grade.9 12.6731 34.87 0.5448 2.983
## nodefactor.grade.10 -10.6489 43.69 0.6826 5.651
## nodefactor.grade.11 5.4226 40.69 0.6358 6.464
## nodefactor.grade.12 32.1040 38.67 0.6042 7.466
## nodefactor.sex.2 23.7878 74.95 1.1711 9.922
## nodematch.grade.7 6.3684 17.60 0.2750 4.220
## nodematch.grade.8 0.0808 16.79 0.2623 1.744
## nodematch.grade.9 2.1370 11.91 0.1861 1.059
## nodematch.grade.10 -6.2522 17.63 0.2754 2.151
## nodematch.grade.11 0.6904 12.32 0.1926 2.079
## nodematch.grade.12 12.4102 14.32 0.2238 2.596
## nodematch.sex 21.0940 42.72 0.6676 6.375
## nodematch.race.B -10.5254 29.75 0.4648 4.092
## nodematch.race.O 1.0537 2.45 0.0382 0.232
## nodematch.race.W 28.4351 40.32 0.6300 5.944
## degree0 -0.8843 3.42 0.0534 0.400
## degree1 -1.9326 5.81 0.0907 0.872
## degree2 -0.5579 4.30 0.0671 0.499
## degree3 -0.3372 3.61 0.0564 0.227
##
## 2. Quantiles for each variable:
##
## 2.5% 25% 50% 75% 97.5%
## edges -93.0 -20.2 29.0 82.0 163.00
## gwesp.fixed.0.1 -103.6 -22.3 32.1 89.8 176.27
## absdiff.grade -89.0 -18.0 25.0 69.0 151.62
## nodefactor.race.H -22.0 -5.0 4.0 12.0 29.00
## nodefactor.race.O -24.0 -2.0 10.0 23.0 44.00
## nodefactor.race.W -103.6 3.0 68.0 133.0 247.00
## nodefactor.grade.8 -79.0 -20.0 8.0 33.0 76.62
## nodefactor.grade.9 -57.0 -9.0 13.0 35.0 84.62
## nodefactor.grade.10 -101.0 -40.0 -7.0 21.0 66.00
## nodefactor.grade.11 -71.0 -22.0 4.0 31.0 89.00
## nodefactor.grade.12 -39.6 5.0 30.0 61.0 105.00
## nodefactor.sex.2 -113.0 -29.0 19.0 76.0 177.00
## nodematch.grade.7 -21.0 -8.0 5.0 18.0 48.00
## nodematch.grade.8 -34.0 -11.0 1.0 12.0 30.00
## nodematch.grade.9 -21.0 -6.0 2.0 10.0 26.00
## nodematch.grade.10 -43.0 -18.0 -5.0 6.0 26.00
## nodematch.grade.11 -21.0 -7.0 0.0 8.0 28.00
## nodematch.grade.12 -14.0 2.0 12.0 23.0 40.00
## nodematch.sex -55.0 -11.0 19.0 53.0 103.00
## nodematch.race.B -67.0 -31.0 -10.0 9.0 52.00
## nodematch.race.O -3.0 -1.0 1.0 2.0 6.62
## nodematch.race.W -49.0 0.0 28.0 57.0 107.00
## degree0 -7.0 -3.0 -1.0 1.0 6.00
## degree1 -12.0 -6.0 -2.0 2.0 10.00
## degree2 -8.0 -4.0 -1.0 2.0 8.00
## degree3 -7.0 -3.0 -1.0 2.0 7.00
##
##
## Sample statistics cross-correlations:
## edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## edges 1.000000 0.977728 0.8285327 0.4252814
## gwesp.fixed.0.1 0.977728 1.000000 0.7829855 0.4217839
## absdiff.grade 0.828533 0.782985 1.0000000 0.2877039
## nodefactor.race.H 0.425281 0.421784 0.2877039 1.0000000
## nodefactor.race.O 0.490631 0.477951 0.2644637 0.3554472
## nodefactor.race.W 0.867849 0.861169 0.7437370 0.3192278
## nodefactor.grade.8 0.513453 0.534567 0.3082195 0.2839140
## nodefactor.grade.9 0.593029 0.596151 0.5879181 0.2550964
## nodefactor.grade.10 0.593873 0.582973 0.4150145 0.3514829
## nodefactor.grade.11 0.673370 0.640651 0.6616388 0.1514820
## nodefactor.grade.12 0.496690 0.464258 0.5414163 0.1039140
## nodefactor.sex.2 0.885914 0.871259 0.7584110 0.3877460
## nodematch.grade.7 0.510740 0.493341 0.2860773 0.2726473
## nodematch.grade.8 0.369180 0.403193 0.1060037 0.2344610
## nodematch.grade.9 0.229328 0.243972 0.1374088 0.1149511
## nodematch.grade.10 0.448122 0.449387 0.2132589 0.3192223
## nodematch.grade.11 0.595907 0.568995 0.5274709 0.1236229
## nodematch.grade.12 0.379323 0.355401 0.3440549 0.0855710
## nodematch.sex 0.929886 0.912600 0.7724067 0.4090441
## nodematch.race.B 0.606524 0.578297 0.5385467 0.0847929
## nodematch.race.O 0.201148 0.178678 0.0509717 0.1681029
## nodematch.race.W 0.804074 0.802431 0.7152945 0.2213394
## degree0 -0.569986 -0.505991 -0.4736191 -0.2184240
## degree1 -0.730830 -0.691448 -0.6004357 -0.2680109
## degree2 -0.555811 -0.538825 -0.4550036 -0.2078524
## degree3 -0.412280 -0.405276 -0.3261590 -0.1977782
## nodefactor.race.O nodefactor.race.W nodefactor.grade.8
## edges 0.4906305 0.867849 0.5134531
## gwesp.fixed.0.1 0.4779506 0.861169 0.5345675
## absdiff.grade 0.2644637 0.743737 0.3082195
## nodefactor.race.H 0.3554472 0.319228 0.2839140
## nodefactor.race.O 1.0000000 0.411145 0.4269209
## nodefactor.race.W 0.4111446 1.000000 0.3971296
## nodefactor.grade.8 0.4269209 0.397130 1.0000000
## nodefactor.grade.9 0.1284439 0.545002 0.2012900
## nodefactor.grade.10 0.2699541 0.414582 0.1047373
## nodefactor.grade.11 0.1350910 0.652745 0.1321555
## nodefactor.grade.12 -0.0584000 0.361864 0.0765335
## nodefactor.sex.2 0.4053485 0.754401 0.4491223
## nodematch.grade.7 0.6797469 0.560716 0.2103441
## nodematch.grade.8 0.3527868 0.269482 0.9214153
## nodematch.grade.9 -0.0238003 0.192588 0.0140224
## nodematch.grade.10 0.2697867 0.279853 0.0647561
## nodematch.grade.11 0.1609803 0.589773 0.1284275
## nodematch.grade.12 -0.0617181 0.247247 0.0656722
## nodematch.sex 0.4466430 0.826281 0.4742009
## nodematch.race.B 0.0385323 0.195478 0.2864583
## nodematch.race.O 0.6442240 0.153014 0.1559877
## nodematch.race.W 0.3161850 0.980688 0.3287476
## degree0 -0.3332570 -0.436256 -0.2152746
## degree1 -0.4181252 -0.605884 -0.2674937
## degree2 -0.2873864 -0.478293 -0.2096022
## degree3 -0.1652973 -0.356462 -0.1457412
## nodefactor.grade.9 nodefactor.grade.10 nodefactor.grade.11
## edges 0.5930295 0.5938729 0.6733700
## gwesp.fixed.0.1 0.5961513 0.5829731 0.6406508
## absdiff.grade 0.5879181 0.4150145 0.6616388
## nodefactor.race.H 0.2550964 0.3514829 0.1514820
## nodefactor.race.O 0.1284439 0.2699541 0.1350910
## nodefactor.race.W 0.5450017 0.4145818 0.6527448
## nodefactor.grade.8 0.2012900 0.1047373 0.1321555
## nodefactor.grade.9 1.0000000 0.2307075 0.3738857
## nodefactor.grade.10 0.2307075 1.0000000 0.2123111
## nodefactor.grade.11 0.3738857 0.2123111 1.0000000
## nodefactor.grade.12 0.2017232 0.2109727 0.3421486
## nodefactor.sex.2 0.5407644 0.5070184 0.6541551
## nodematch.grade.7 0.0954743 0.1944665 0.2444950
## nodematch.grade.8 0.0693713 0.0230657 0.0710252
## nodematch.grade.9 0.7857052 0.0243342 0.1323932
## nodematch.grade.10 0.0740593 0.9278937 0.0730677
## nodematch.grade.11 0.3002726 0.1402587 0.9335892
## nodematch.grade.12 0.1005290 0.1502588 0.1887892
## nodematch.sex 0.5510795 0.5539353 0.6338422
## nodematch.race.B 0.3672699 0.4882275 0.4089847
## nodematch.race.O -0.0179282 0.0711361 0.0425362
## nodematch.race.W 0.5221337 0.3623372 0.6557534
## degree0 -0.2097876 -0.3167183 -0.4109774
## degree1 -0.2919488 -0.3940804 -0.5619487
## degree2 -0.2605349 -0.3324188 -0.4047382
## degree3 -0.2550139 -0.2774747 -0.2836645
## nodefactor.grade.12 nodefactor.sex.2 nodematch.grade.7
## edges 0.49668986 0.885914 0.51073971
## gwesp.fixed.0.1 0.46425792 0.871259 0.49334148
## absdiff.grade 0.54141629 0.758411 0.28607734
## nodefactor.race.H 0.10391400 0.387746 0.27264728
## nodefactor.race.O -0.05839997 0.405349 0.67974689
## nodefactor.race.W 0.36186369 0.754401 0.56071555
## nodefactor.grade.8 0.07653345 0.449122 0.21034406
## nodefactor.grade.9 0.20172324 0.540764 0.09547431
## nodefactor.grade.10 0.21097269 0.507018 0.19446654
## nodefactor.grade.11 0.34214856 0.654155 0.24449497
## nodefactor.grade.12 1.00000000 0.433037 -0.08304742
## nodefactor.sex.2 0.43303718 1.000000 0.40986095
## nodematch.grade.7 -0.08304742 0.409861 1.00000000
## nodematch.grade.8 0.02545613 0.323995 0.13619960
## nodematch.grade.9 0.00274681 0.214562 -0.07340449
## nodematch.grade.10 0.10636589 0.361817 0.19419355
## nodematch.grade.11 0.23072059 0.573390 0.29840049
## nodematch.grade.12 0.94057612 0.318980 -0.10187178
## nodematch.sex 0.44949142 0.817526 0.48129780
## nodematch.race.B 0.52870536 0.565285 0.00178469
## nodematch.race.O -0.13047751 0.129941 0.50158134
## nodematch.race.W 0.34218904 0.697254 0.51082116
## degree0 -0.31133219 -0.494599 -0.43347547
## degree1 -0.40545680 -0.629176 -0.52476882
## degree2 -0.32069151 -0.468656 -0.34574928
## degree3 -0.26105376 -0.360957 -0.17834401
## nodematch.grade.8 nodematch.grade.9 nodematch.grade.10
## edges 0.36918018 0.22932835 0.4481219
## gwesp.fixed.0.1 0.40319299 0.24397249 0.4493866
## absdiff.grade 0.10600371 0.13740885 0.2132589
## nodefactor.race.H 0.23446099 0.11495105 0.3192223
## nodefactor.race.O 0.35278684 -0.02380026 0.2697867
## nodefactor.race.W 0.26948226 0.19258829 0.2798529
## nodefactor.grade.8 0.92141527 0.01402244 0.0647561
## nodefactor.grade.9 0.06937127 0.78570519 0.0740593
## nodefactor.grade.10 0.02306575 0.02433425 0.9278937
## nodefactor.grade.11 0.07102519 0.13239317 0.0730677
## nodefactor.grade.12 0.02545613 0.00274681 0.1063659
## nodefactor.sex.2 0.32399538 0.21456197 0.3618167
## nodematch.grade.7 0.13619960 -0.07340449 0.1941935
## nodematch.grade.8 1.00000000 0.00820935 0.0108240
## nodematch.grade.9 0.00820935 1.00000000 -0.0400632
## nodematch.grade.10 0.01082404 -0.04006316 1.0000000
## nodematch.grade.11 0.07044513 0.10774580 0.0379256
## nodematch.grade.12 0.03586577 -0.03709764 0.0825802
## nodematch.sex 0.33703460 0.20827386 0.4179454
## nodematch.race.B 0.19380146 0.18157582 0.3787870
## nodematch.race.O 0.14488077 -0.02646593 0.0852595
## nodematch.race.W 0.20878633 0.17964441 0.2268827
## degree0 -0.13426969 -0.00699163 -0.2412800
## degree1 -0.17299943 -0.04410978 -0.3041413
## degree2 -0.14888560 -0.06858842 -0.2578410
## degree3 -0.10515912 -0.12203457 -0.2316935
## nodematch.grade.11 nodematch.grade.12 nodematch.sex
## edges 0.5959074 0.3793231 0.929886
## gwesp.fixed.0.1 0.5689953 0.3554008 0.912600
## absdiff.grade 0.5274709 0.3440549 0.772407
## nodefactor.race.H 0.1236229 0.0855710 0.409044
## nodefactor.race.O 0.1609803 -0.0617181 0.446643
## nodefactor.race.W 0.5897732 0.2472474 0.826281
## nodefactor.grade.8 0.1284275 0.0656722 0.474201
## nodefactor.grade.9 0.3002726 0.1005290 0.551079
## nodefactor.grade.10 0.1402587 0.1502588 0.553935
## nodefactor.grade.11 0.9335892 0.1887892 0.633842
## nodefactor.grade.12 0.2307206 0.9405761 0.449491
## nodefactor.sex.2 0.5733896 0.3189802 0.817526
## nodematch.grade.7 0.2984005 -0.1018718 0.481298
## nodematch.grade.8 0.0704451 0.0358658 0.337035
## nodematch.grade.9 0.1077458 -0.0370976 0.208274
## nodematch.grade.10 0.0379256 0.0825802 0.417945
## nodematch.grade.11 1.0000000 0.1021749 0.565704
## nodematch.grade.12 0.1021749 1.0000000 0.332011
## nodematch.sex 0.5657040 0.3320111 1.000000
## nodematch.race.B 0.3330445 0.4464299 0.541325
## nodematch.race.O 0.0877327 -0.1190353 0.174029
## nodematch.race.W 0.5950707 0.2222166 0.771105
## degree0 -0.3767468 -0.2501889 -0.521288
## degree1 -0.5161682 -0.3271763 -0.669323
## degree2 -0.3690360 -0.2586638 -0.526784
## degree3 -0.2562135 -0.2149226 -0.391031
## nodematch.race.B nodematch.race.O nodematch.race.W
## edges 0.60652384 0.2011482 0.804074
## gwesp.fixed.0.1 0.57829709 0.1786777 0.802431
## absdiff.grade 0.53854668 0.0509717 0.715294
## nodefactor.race.H 0.08479291 0.1681029 0.221339
## nodefactor.race.O 0.03853232 0.6442240 0.316185
## nodefactor.race.W 0.19547820 0.1530141 0.980688
## nodefactor.grade.8 0.28645830 0.1559877 0.328748
## nodefactor.grade.9 0.36726995 -0.0179282 0.522134
## nodefactor.grade.10 0.48822748 0.0711361 0.362337
## nodefactor.grade.11 0.40898465 0.0425362 0.655753
## nodefactor.grade.12 0.52870536 -0.1304775 0.342189
## nodefactor.sex.2 0.56528548 0.1299405 0.697254
## nodematch.grade.7 0.00178469 0.5015813 0.510821
## nodematch.grade.8 0.19380146 0.1448808 0.208786
## nodematch.grade.9 0.18157582 -0.0264659 0.179644
## nodematch.grade.10 0.37878699 0.0852595 0.226883
## nodematch.grade.11 0.33304452 0.0877327 0.595071
## nodematch.grade.12 0.44642992 -0.1190353 0.222217
## nodematch.sex 0.54132534 0.1740287 0.771105
## nodematch.race.B 1.00000000 -0.0259663 0.155406
## nodematch.race.O -0.02596628 1.0000000 0.108350
## nodematch.race.W 0.15540601 0.1083500 1.000000
## degree0 -0.42777006 -0.2065992 -0.391541
## degree1 -0.48430511 -0.2548138 -0.558664
## degree2 -0.35284391 -0.1576878 -0.445871
## degree3 -0.25872169 -0.0440064 -0.335495
## degree0 degree1 degree2 degree3
## edges -0.56998650 -0.7308300 -0.5558115 -0.4122804
## gwesp.fixed.0.1 -0.50599145 -0.6914483 -0.5388248 -0.4052756
## absdiff.grade -0.47361915 -0.6004357 -0.4550036 -0.3261590
## nodefactor.race.H -0.21842403 -0.2680109 -0.2078524 -0.1977782
## nodefactor.race.O -0.33325697 -0.4181252 -0.2873864 -0.1652973
## nodefactor.race.W -0.43625634 -0.6058843 -0.4782934 -0.3564616
## nodefactor.grade.8 -0.21527456 -0.2674937 -0.2096022 -0.1457412
## nodefactor.grade.9 -0.20978761 -0.2919488 -0.2605349 -0.2550139
## nodefactor.grade.10 -0.31671826 -0.3940804 -0.3324188 -0.2774747
## nodefactor.grade.11 -0.41097741 -0.5619487 -0.4047382 -0.2836645
## nodefactor.grade.12 -0.31133219 -0.4054568 -0.3206915 -0.2610538
## nodefactor.sex.2 -0.49459897 -0.6291760 -0.4686558 -0.3609567
## nodematch.grade.7 -0.43347547 -0.5247688 -0.3457493 -0.1783440
## nodematch.grade.8 -0.13426969 -0.1729994 -0.1488856 -0.1051591
## nodematch.grade.9 -0.00699163 -0.0441098 -0.0685884 -0.1220346
## nodematch.grade.10 -0.24127996 -0.3041413 -0.2578410 -0.2316935
## nodematch.grade.11 -0.37674683 -0.5161682 -0.3690360 -0.2562135
## nodematch.grade.12 -0.25018890 -0.3271763 -0.2586638 -0.2149226
## nodematch.sex -0.52128773 -0.6693232 -0.5267836 -0.3910311
## nodematch.race.B -0.42777006 -0.4843051 -0.3528439 -0.2587217
## nodematch.race.O -0.20659924 -0.2548138 -0.1576878 -0.0440064
## nodematch.race.W -0.39154068 -0.5586645 -0.4458710 -0.3354949
## degree0 1.00000000 0.3644582 0.2093792 0.1219703
## degree1 0.36445817 1.0000000 0.2955733 0.1947128
## degree2 0.20937923 0.2955733 1.0000000 0.1195232
## degree3 0.12197034 0.1947128 0.1195232 1.0000000
##
## Sample statistics auto-correlation:
## Chain 1
## edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## Lag 0 1.000000 1.000000 1.000000 1.000000
## Lag 1024 0.966013 0.956236 0.901777 0.908486
## Lag 2048 0.937583 0.922101 0.827368 0.832385
## Lag 3072 0.912967 0.894256 0.768607 0.768737
## Lag 4096 0.892434 0.871349 0.723570 0.714128
## Lag 5120 0.872690 0.848806 0.682595 0.666924
## nodefactor.race.O nodefactor.race.W nodefactor.grade.8
## Lag 0 1.000000 1.000000 1.000000
## Lag 1024 0.940733 0.961340 0.934827
## Lag 2048 0.894070 0.928457 0.877980
## Lag 3072 0.853359 0.898748 0.828667
## Lag 4096 0.817240 0.873208 0.782014
## Lag 5120 0.785860 0.848910 0.741046
## nodefactor.grade.9 nodefactor.grade.10 nodefactor.grade.11
## Lag 0 1.000000 1.000000 1.000000
## Lag 1024 0.914197 0.954229 0.971846
## Lag 2048 0.849267 0.914213 0.948895
## Lag 3072 0.793603 0.881794 0.930967
## Lag 4096 0.745298 0.853933 0.914008
## Lag 5120 0.698460 0.828131 0.897395
## nodefactor.grade.12 nodefactor.sex.2 nodematch.grade.7
## Lag 0 1.000000 1.000000 1.000000
## Lag 1024 0.970328 0.954774 0.982914
## Lag 2048 0.944457 0.916876 0.969049
## Lag 3072 0.921743 0.883812 0.957138
## Lag 4096 0.902370 0.855169 0.947228
## Lag 5120 0.884987 0.828248 0.937715
## nodematch.grade.8 nodematch.grade.9 nodematch.grade.10
## Lag 0 1.000000 1.000000 1.000000
## Lag 1024 0.945543 0.922831 0.960577
## Lag 2048 0.896230 0.860356 0.926472
## Lag 3072 0.852108 0.806524 0.897482
## Lag 4096 0.808940 0.755126 0.870531
## Lag 5120 0.768929 0.706781 0.845600
## nodematch.grade.11 nodematch.grade.12 nodematch.sex nodematch.race.B
## Lag 0 1.000000 1.000000 1.000000 1.000000
## Lag 1024 0.971473 0.975659 0.956105 0.964117
## Lag 2048 0.949245 0.953121 0.920404 0.935173
## Lag 3072 0.931233 0.933251 0.890433 0.908917
## Lag 4096 0.914831 0.915640 0.866279 0.885230
## Lag 5120 0.900691 0.898205 0.843369 0.863757
## nodematch.race.O nodematch.race.W degree0 degree1 degree2 degree3
## Lag 0 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
## Lag 1024 0.908679 0.957831 0.597717 0.751974 0.491430 0.378856
## Lag 2048 0.838929 0.922294 0.482740 0.695325 0.407028 0.275825
## Lag 3072 0.781822 0.888727 0.438288 0.682968 0.362599 0.259824
## Lag 4096 0.735033 0.858906 0.400148 0.667930 0.350738 0.249302
## Lag 5120 0.695834 0.832413 0.390528 0.651812 0.348449 0.240487
##
## Sample statistics burn-in diagnostic (Geweke):
## Chain 1
##
## Fraction in 1st window = 0.1
## Fraction in 2nd window = 0.5
##
## edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## 1.05523 1.26852 0.58096 2.48108
## nodefactor.race.O nodefactor.race.W nodefactor.grade.8 nodefactor.grade.9
## 3.12177 1.89531 1.89452 -0.75043
## nodefactor.grade.10 nodefactor.grade.11 nodefactor.grade.12 nodefactor.sex.2
## 1.43600 0.06706 0.48500 1.96516
## nodematch.grade.7 nodematch.grade.8 nodematch.grade.9 nodematch.grade.10
## 2.29870 1.75145 -1.55092 1.92503
## nodematch.grade.11 nodematch.grade.12 nodematch.sex nodematch.race.B
## -0.03148 0.71969 1.14709 0.51429
## nodematch.race.O nodematch.race.W degree0 degree1
## 1.10348 1.60386 -1.57249 -1.35125
## degree2 degree3
## -1.02691 -1.36675
##
## Individual P-values (lower = worse):
## edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## 0.2913188 0.2046129 0.5612708 0.0130985
## nodefactor.race.O nodefactor.race.W nodefactor.grade.8 nodefactor.grade.9
## 0.0017977 0.0580512 0.0581565 0.4529982
## nodefactor.grade.10 nodefactor.grade.11 nodefactor.grade.12 nodefactor.sex.2
## 0.1510018 0.9465325 0.6276728 0.0493959
## nodematch.grade.7 nodematch.grade.8 nodematch.grade.9 nodematch.grade.10
## 0.0215221 0.0798677 0.1209215 0.0542256
## nodematch.grade.11 nodematch.grade.12 nodematch.sex nodematch.race.B
## 0.9748892 0.4717140 0.2513453 0.6070469
## nodematch.race.O nodematch.race.W degree0 degree1
## 0.2698193 0.1087440 0.1158371 0.1766162
## degree2 degree3
## 0.3044607 0.1717024
## Joint P-value (lower = worse): 0 .
##
## MCMC diagnostics shown here are from the last round of simulation, prior to computation of final parameter estimates. Because the final estimates are refinements of those used for this simulation run, these diagnostics may understate model performance. To directly assess the performance of the final model on in-model statistics, please use the GOF command: gof(ergmFitObject, GOF=~model).
run_04_ergm <- function() simulate.ergm(dixon_model_04_ergm) %>% intergraph::asIgraph()
dixon_04_lst <- run_network_model_assessment(dixon_igraph, run_04_ergm, n_iter = 1000)
plot(dixon_04_lst$assess_plot)
summary(dixon_model_04_ergm)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: dixon_network ~ edges + gwesp(0.1, fixed = TRUE) + absdiff("grade") +
## nodefactor("race") + nodefactor("grade") + nodefactor("sex") +
## nodematch("grade", diff = TRUE) + nodematch("sex", diff = FALSE) +
## nodematch("race", diff = TRUE) + degree(0:3)
##
## Iterations: 14 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % p-value
## edges -6.3068 0.3867 0 <1e-04 ***
## gwesp.fixed.0.1 0.9159 0.0744 0 <1e-04 ***
## absdiff.grade -0.4004 0.0640 0 <1e-04 ***
## nodefactor.race.H 1.2617 0.1310 0 <1e-04 ***
## nodefactor.race.O 1.4310 0.1431 0 <1e-04 ***
## nodefactor.race.W 0.2409 0.1548 0 0.1197
## nodefactor.grade.8 0.0678 0.1752 0 0.6989
## nodefactor.grade.9 0.6988 0.1665 0 <1e-04 ***
## nodefactor.grade.10 0.0149 0.1560 0 0.9238
## nodefactor.grade.11 0.3463 0.1578 0 0.0282 *
## nodefactor.grade.12 0.4248 0.1610 0 0.0083 **
## nodefactor.sex.2 0.0428 0.0305 0 0.1599
## nodematch.grade.7 1.7274 0.3532 0 <1e-04 ***
## nodematch.grade.8 1.5206 0.2079 0 <1e-04 ***
## nodematch.grade.9 0.1176 0.1968 0 0.5500
## nodematch.grade.10 1.5206 0.1943 0 <1e-04 ***
## nodematch.grade.11 0.7397 0.2687 0 0.0059 **
## nodematch.grade.12 0.9323 0.3071 0 0.0024 **
## nodematch.sex 0.2693 0.0648 0 <1e-04 ***
## nodematch.race.B 2.1802 0.1881 0 <1e-04 ***
## nodematch.race.H -Inf 0.0000 0 <1e-04 ***
## nodematch.race.O -1.3140 0.5733 0 0.0219 *
## nodematch.race.W 1.4872 0.1944 0 <1e-04 ***
## degree0 2.1835 0.4974 0 <1e-04 ***
## degree1 2.0597 0.3736 0 <1e-04 ***
## degree2 1.0961 0.3553 0 0.0020 **
## degree3 0.4419 0.3506 0 0.2076
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 42459 on 30628 degrees of freedom
## Residual Deviance: NaN on 30601 degrees of freedom
##
## AIC: NaN BIC: NaN (Smaller is better.)
##
## Warning: The following terms have infinite coefficient estimates:
## nodematch.race.H
devtools::session_info()
## Session info ------------------------------------------------------------------
## setting value
## version R version 3.5.0 (2018-04-23)
## system x86_64, linux-gnu
## ui RStudio (1.1.423)
## language en_GB:en
## collate en_GB.UTF-8
## tz Europe/Dublin
## date 2018-05-21
## Packages ----------------------------------------------------------------------
## package * version date source
## assertthat 0.2.0 2017-04-11 CRAN (R 3.5.0)
## backports 1.1.2 2017-12-13 CRAN (R 3.5.0)
## base * 3.5.0 2018-04-28 local
## bindr 0.1.1 2018-03-13 CRAN (R 3.5.0)
## bindrcpp * 0.2.2 2018-03-29 CRAN (R 3.5.0)
## broom 0.4.4 2018-03-29 CRAN (R 3.5.0)
## cellranger 1.1.0 2016-07-27 CRAN (R 3.5.0)
## cli 1.0.0 2017-11-05 CRAN (R 3.5.0)
## coda 0.19-1 2016-12-08 CRAN (R 3.5.0)
## colorspace 1.3-2 2016-12-14 CRAN (R 3.5.0)
## compiler 3.5.0 2018-04-28 local
## cowplot * 0.9.2 2017-12-17 CRAN (R 3.5.0)
## crayon 1.3.4 2017-09-16 CRAN (R 3.5.0)
## datasets * 3.5.0 2018-04-28 local
## DEoptimR 1.0-8 2016-11-19 CRAN (R 3.5.0)
## devtools * 1.13.5 2018-02-18 CRAN (R 3.5.0)
## digest 0.6.15 2018-01-28 CRAN (R 3.5.0)
## dplyr * 0.7.5 2018-05-19 CRAN (R 3.5.0)
## ergm * 3.8.0 2017-08-20 CRAN (R 3.5.0)
## evaluate 0.10.1 2017-06-24 CRAN (R 3.5.0)
## forcats * 0.3.0 2018-02-19 CRAN (R 3.5.0)
## foreign 0.8-70 2018-04-23 CRAN (R 3.5.0)
## fortunes 1.5-4 2016-12-29 CRAN (R 3.5.0)
## ggnetwork * 0.5.1 2016-03-25 CRAN (R 3.5.0)
## ggplot2 * 2.2.1 2016-12-30 CRAN (R 3.5.0)
## ggrepel 0.8.0 2018-05-09 CRAN (R 3.5.0)
## glue 1.2.0 2017-10-29 CRAN (R 3.5.0)
## graphics * 3.5.0 2018-04-28 local
## grDevices * 3.5.0 2018-04-28 local
## grid 3.5.0 2018-04-28 local
## gtable 0.2.0 2016-02-26 CRAN (R 3.5.0)
## haven 1.1.1 2018-01-18 CRAN (R 3.5.0)
## hms 0.4.2 2018-03-10 CRAN (R 3.5.0)
## htmltools 0.3.6 2017-04-28 CRAN (R 3.5.0)
## httr 1.3.1 2017-08-20 CRAN (R 3.5.0)
## igraph * 1.2.1 2018-03-10 CRAN (R 3.5.0)
## igraphdata * 1.0.1 2015-07-13 CRAN (R 3.5.0)
## intergraph * 2.0-2 2016-12-05 CRAN (R 3.5.0)
## jsonlite 1.5 2017-06-01 CRAN (R 3.5.0)
## knitr 1.20 2018-02-20 CRAN (R 3.5.0)
## labeling 0.3 2014-08-23 CRAN (R 3.5.0)
## lattice 0.20-35 2017-03-25 CRAN (R 3.5.0)
## latticeExtra 0.6-28 2016-02-09 CRAN (R 3.5.0)
## lazyeval 0.2.1 2017-10-29 CRAN (R 3.5.0)
## lpSolve 5.6.13 2015-09-19 CRAN (R 3.5.0)
## lubridate 1.7.4 2018-04-11 CRAN (R 3.5.0)
## magrittr 1.5 2014-11-22 CRAN (R 3.5.0)
## MASS 7.3-50 2018-04-30 CRAN (R 3.5.0)
## Matrix 1.2-14 2018-04-09 CRAN (R 3.5.0)
## memoise 1.1.0 2017-04-21 CRAN (R 3.5.0)
## methods * 3.5.0 2018-04-28 local
## mnormt 1.5-5 2016-10-15 CRAN (R 3.5.0)
## modelr 0.1.2 2018-05-11 CRAN (R 3.5.0)
## munsell 0.4.3 2016-02-13 CRAN (R 3.5.0)
## network * 1.13.0.1 2018-04-02 CRAN (R 3.5.0)
## nlme 3.1-137 2018-04-07 CRAN (R 3.5.0)
## parallel 3.5.0 2018-04-28 local
## pillar 1.2.2 2018-04-26 CRAN (R 3.5.0)
## pkgconfig 2.0.1 2017-03-21 CRAN (R 3.5.0)
## plyr 1.8.4 2016-06-08 CRAN (R 3.5.0)
## psych 1.8.4 2018-05-06 CRAN (R 3.5.0)
## purrr * 0.2.4 2017-10-18 CRAN (R 3.5.0)
## R6 2.2.2 2017-06-17 CRAN (R 3.5.0)
## RColorBrewer 1.1-2 2014-12-07 CRAN (R 3.5.0)
## Rcpp 0.12.17 2018-05-18 CRAN (R 3.5.0)
## readr * 1.1.1 2017-05-16 CRAN (R 3.5.0)
## readxl 1.1.0 2018-04-20 CRAN (R 3.5.0)
## reshape2 1.4.3 2017-12-11 CRAN (R 3.5.0)
## rlang 0.2.0 2018-02-20 CRAN (R 3.5.0)
## rmarkdown 1.9 2018-03-01 CRAN (R 3.5.0)
## robustbase 0.93-0 2018-04-24 CRAN (R 3.5.0)
## rprojroot 1.3-2 2018-01-03 CRAN (R 3.5.0)
## rstudioapi 0.7 2017-09-07 CRAN (R 3.5.0)
## rvest 0.3.2 2016-06-17 CRAN (R 3.5.0)
## sand * 1.0.3 2017-03-02 CRAN (R 3.5.0)
## scales * 0.5.0 2017-08-24 CRAN (R 3.5.0)
## sna * 2.4 2016-08-08 CRAN (R 3.5.0)
## statnet.common * 4.0.0 2017-08-16 CRAN (R 3.5.0)
## stats * 3.5.0 2018-04-28 local
## stringi 1.2.2 2018-05-02 CRAN (R 3.5.0)
## stringr * 1.3.1 2018-05-10 CRAN (R 3.5.0)
## tibble * 1.4.2 2018-01-22 CRAN (R 3.5.0)
## tidyr * 0.8.1 2018-05-18 CRAN (R 3.5.0)
## tidyselect 0.2.4 2018-02-26 CRAN (R 3.5.0)
## tidyverse * 1.2.1 2017-11-14 CRAN (R 3.5.0)
## tools 3.5.0 2018-04-28 local
## trust 0.1-7 2015-07-04 CRAN (R 3.5.0)
## utils * 3.5.0 2018-04-28 local
## withr 2.1.2 2018-03-15 CRAN (R 3.5.0)
## xml2 1.2.0 2018-01-24 CRAN (R 3.5.0)
## yaml 2.1.19 2018-05-01 CRAN (R 3.5.0)